// 埋点事件类型
export const EventTypes = {
    PAGE_VIEW: 'page_view',
    BUTTON_CLICK: 'button_click',
    API_REQUEST: 'api_request',
    API_RESPONSE: 'api_response',
    ERROR: 'error',
    NOT_FOUND: 'not_found'
}

// 埋点上报函数
export const trackEvent = (eventName, eventData = {}) => {
    const baseData = {
        timestamp: new Date().getTime(),
        url: window.location.href,
        userAgent: navigator.userAgent,
        // 可以添加用户ID等其他信息
        userId: localStorage.getItem('userId')
    }

    const data = {
        ...baseData,
        eventName,
        ...eventData
    }

    // 如果是 404 页面，添加额外的错误信息
    if (eventData.is404) {
        data.errorType = '404'
        data.errorUrl = window.location.href
        data.referrer = document.referrer
    }

    // 这里可以替换成实际的埋点上报接口
    if (import.meta.env.DEV) {
        console.log('埋点数据：', data)
    } else {
        // 生产环境发送到实际的埋点服务器
        sendToAnalyticsServer(data)
    }
}

// 发送埋点数据到服务器
const sendToAnalyticsServer = (data) => {
    const analyticsUrl = import.meta.env.VITE_ANALYTICS_URL

    // 使用 navigator.sendBeacon 进行上报，避免页面关闭时丢失数据
    if (navigator.sendBeacon) {
        navigator.sendBeacon(analyticsUrl, JSON.stringify(data))
    } else {
        // 降级处理
        fetch(analyticsUrl, {
            method: 'POST',
            body: JSON.stringify(data),
            headers: {
                'Content-Type': 'application/json'
            },
            keepalive: true
        }).catch(console.error)
    }
} 